//     题目三：简易指令译码器设计
// 模块作用说明：
// 指令译码器是CPU控制单元的关键模块，其作用是从一条机器指令中解析出控制信号与
// 操作数选择信息，进而驱动数据通路进行计算操作。该模块模拟了处理器执行流程中的“译
// 码阶段”，通过拆分指令字段生成ALU控制码与寄存器读写地址，是连接“指令”与“功
// 能单元”的桥梁。请设计一个简易的指令译码器模块，支持如下8位指令格式（类RISC
// 结构）：
// [7:4] → 操作码 (op) [3:2]→源寄存器 1 (rs1) [1:0]→源寄存器 2 (rs2)
// 模块输出用于驱动ALU和RegFile：
// 1 module decoder (
//  2
//  3
//  4
//  input wire [7:0] instr,
//  // 输入指令
// output wire [3:0] op,
//  // ALU操作码
// output wire [1:0] rs1,
//  // 寄存器地址（假设4个寄存器）
// 3
// output wire [1:0] rs2
//  // 寄存器地址（假设4个寄存器）
// 5
//  6 );
//  Listing 3: 指令译码模块接口定义
// • 请使用组合逻辑（assign 或always @(*)）提取操作码与寄存器地址；
// • 操作码(op) 与题目一中ALU模块编码保持一致，支持至少8种操作；
// • 思考题：若要扩展指令支持立即数操作，该指令格式应如何调整？
// 设计目的解释：
// 本题的目标是让学生掌握如何解析固定宽度的指令，并提取出控制路径中需要的信号（如
// ALU 操作码、寄存器地址等），理解“指令驱动运算”的概念。这一模块为下一步构建完
// 整的“取指→译码→执行→写回”CPU流水线打下关键基础。通过此题训练，学生将
// 不再只是“写电路”，而是开始“模拟执行指令”。


module decoder(
    input wire[7:0] instr,
    output wire[3:0] op,
    output wire[1:0]rs1,
    output wire[1:0]rs2
);

    //使用assign语句来提取操作码和寄存器地址
    assign op = instr[7:4];
    assign rs1 = instr[3:2];
    assign rs2 = instr[1:0];
endmodule
